pub static ASCII_ID_MAP: [u8; 256] = [
    // Control
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0x00, // Space
    0x01, // !
    0x02, // "
    0x03, // #
    0x04, // $
    0x05, // %
    0x06, // &
    0x07, // '
    0x08, // (
    0x09, // )
    0x0A, // *
    0x0B, // +
    0x0C, // ,
    0x0D, // -
    0x0E, // .
    0x0F, // /
    // Digits
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x10, // :
    0x11, // ;
    0x12, // <
    0x13, // =
    0x14, // >
    0x15, // ?
    0x16, // @
    0x17, // A
    0x18, // B
    0x19, // C
    0x1A, // D
    0x1B, // E
    0x1C, // F
    0x1D, // G
    0x1E, // H
    0x1F, // I
    0x20, // J
    0x21, // K
    0x22, // L
    0x23, // M
    0x24, // N
    0x25, // O
    0x26, // P
    0x27, // Q
    0x28, // R
    0x29, // S
    0x2A, // T
    0x2B, // U
    0x2C, // V
    0x2D, // W
    0x2E, // X
    0x2F, // Y
    0x30, // Z
    0x31, // [
    0x32, // \
    0x33, // ]
    0x34, // ^
    0x35, // _
    0x36, // `
    0x17, // a
    0x18, // b
    0x19, // c
    0x1A, // d
    0x1B, // e
    0x1C, // f
    0x1D, // g
    0x1E, // h
    0x1F, // i
    0x20, // j
    0x21, // k
    0x22, // l
    0x23, // m
    0x24, // n
    0x25, // o
    0x26, // p
    0x27, // q
    0x28, // r
    0x29, // s
    0x2A, // t
    0x2B, // u
    0x2C, // v
    0x2D, // w
    0x2E, // x
    0x2F, // y
    0x30, // z
    0x37, // {
    0x38, // |
    0x39, // }
    0x40, // ~
    0xFF, // DEL
    // Extended / multi-byte UTF-8
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
];

lazy_static! {
    pub static ref ID_ASCII_MAP: [u8; 256] = {
        let mut table = [0; 256];

        for (i, &b) in ASCII_ID_MAP.iter().enumerate() {
            table[b as usize] = i as u8;
        }

        table
    };
}
